package biz.datalk.industrialland.common.util;

import biz.datalk.commons.utils.BasicParserUtils;
import biz.datalk.commons.utils.StringUtils;
import biz.datalk.industrialland.common.def.CommonConstant;

import javax.servlet.http.HttpServletRequest;

/**
 * 从header中取值
 *
 * 该工具类只能从主线程中获取，子线程中无法获取到请求头的值
 *
 * @author tarofang@163.com
 * @date 2020-11-17
 */
public class RequestHeaderUtil {

    /**
     * 获取指定请求头
     *
     * @author       tarofang@163.com
     * @date         2020年11月17日
     *
     * @param headerName 请求头名称
     * @return 请求头的值， 若无值则返回 null
     */
    public static String getHeaderValue(String headerName) {
        HttpServletRequest request = SpringContextUtils.getHttpServletRequest();
        return request.getHeader(headerName);
    }
    public static String getHeaderValue(HttpServletRequest request, String headerName) {
        return request.getHeader(headerName);
    }

    /**
     * 从请求头中获取 access-token
     *
     * @author       tarofang@163.com
     * @date         2020年11月17日
     *
     * @return 用户身份标识（接口调用令牌）
     */
    public static String getAccessToken() {
        String accessToken = getHeaderValue(CommonConstant.ACCESS_TOKEN);
        accessToken = StringUtils.trim(accessToken);
        return accessToken;
    }

    public static String getAccessToken(HttpServletRequest request) {
        String accessToken = getHeaderValue(request, CommonConstant.ACCESS_TOKEN);
        accessToken = StringUtils.trim(accessToken);
        return accessToken;
    }

    /**
     * 从请求头中获取 客户端类型， 即 appType
     *
     * appType有效值  1-android 2-ios 3-windows 4-macos 5-linux
     * 其余无效
     *
     * @author       tarofang@163.com
     * @date         2020年11月17日
     *
     * @return 客户端类型
     */
    public static int getXClientType() {
        String xClientType = getXClientTypeStr();
        return BasicParserUtils.parseInt(xClientType, 0);
    }
    public static int getXClientType(HttpServletRequest request) {
        String xClientType = getXClientTypeStr(request);
        return BasicParserUtils.parseInt(xClientType, 0);
    }

    public static String getXClientTypeStr() {
        return getHeaderValue(CommonConstant.X_CLIENT_TYPE);
    }
    public static String getXClientTypeStr(HttpServletRequest request) {
        return getHeaderValue(request, CommonConstant.X_CLIENT_TYPE);
    }

    /**
     * 从请求头中获取 客户端版本， 即 app_version_code
     *
     * 大于0 标识有效，其余无效
     *
     * @author       tarofang@163.com
     * @date         2020年11月17日
     *
     * @return 客户端类型
     */
    public static int getXClientVer() {
        String xClientVer = getXClientVerStr();
        return BasicParserUtils.parseInt(xClientVer, 0);
    }
    public static int getXClientVer(HttpServletRequest request) {
        String xClientVer = getXClientVerStr(request);
        return BasicParserUtils.parseInt(xClientVer, 0);
    }
    public static String getXClientVerStr() {
        return getHeaderValue(CommonConstant.X_CLIENT_VER);
    }

    public static String getXClientVerStr(HttpServletRequest request) {
        return getHeaderValue(request, CommonConstant.X_CLIENT_VER);
    }
}
